package Conexao;

import erro.ConexaoException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


/**
 * Classe que define um ponto de acesso ao Banco de Dados 
 * e implementa uma conexao com o MySql especificamente.
 * 
 *  @author Esdras, leyla
 */

public class GConexao implements IConexao {

	private static GConexao instancia;

	private String usuario;
	private String senha;
	private String url;
	private String driver;

	public GConexao() {
		usuario = "root";
		senha = "";
		url = "jdbc:mysql://localhost:3306/boladavez";
		driver = "com.mysql.jdbc.Driver";
	}

	/**
	 * Singleton da GConexao, dever? ser utilizada sempre que tiver a
	 * nescessidade de uma instancia do GConexao
	 * 
	 * @return {@link GConexao}
	 * 
	 */
	
	public static GConexao getInstancia() {
		if (instancia == null) {
			instancia = new GConexao();
		}
		return instancia;
	}

	/**
	 * Desconecta do banco de dados MySql. 
         * Caso não consiga, captura o erro de SQLException ou ClassNotFoundException.
	 * Lança um erro ConexaoException
	 * 
	 * @return {@link Connection}
	 * @throws ConexaoException
	 */
	
	@Override
	public Connection conectar() throws ConexaoException {

		try {
			Class.forName(driver);
			Connection c = DriverManager.getConnection(url, usuario, senha);
			return c;
		} catch (SQLException e) {
			throw new ConexaoException(e.getMessage());
		} catch (ClassNotFoundException e) {
			throw new ConexaoException("Banco de Dados não encontrado!");
		}
	}

	/**
	 * Desconecta do banco de dados MySql. 
         * Caso não consiga, captura o erro de SQLException e
	 * lan�a um erro ConexaoException
	 * 
	 * @param Connection 
	 * @throws ConexaoException
	 */
	
	@Override
	public void desconectar(Connection c) throws ConexaoException {
		try {
			c.close();
		} catch (SQLException e) {
			throw new ConexaoException(e.getMessage());
		}
	}
}